package com.windea.study.kotlin.game.tankwar1.business

import com.windea.study.kotlin.game.tankwar1.*
import com.windea.study.kotlin.game.tankwar1.enums.*
import com.windea.study.kotlin.game.tankwar1.model.*

/**
 * 移动运动的能力
 */
interface Movable : View {
	
	/**
	 * 可移动的物体存在方向
	 */
	val currentDirection: Direction
	
	/**
	 * 可移动的物体需要右移动的速度
	 */
	val speed: Int
	
	/**
	 * 判断移动的物体是否和阻塞物体发生碰撞
	 *
	 * @return 要碰撞的方向,如果为null，说明没有碰撞的
	 */
	fun willCollision(block: Blockable): Direction? {
		//未来的坐标
		var x = this.x
		var y = this.y
		//将要碰撞时做判断
		when(currentDirection) {
			Direction.UP -> y -= speed
			Direction.DOWN -> y += speed
			Direction.LEFT -> x -= speed
			Direction.RIGHT -> x += speed
		}
		
		//和边界进行检测
		//越界判断
		if(x < 0) return Direction.LEFT
		if(x > Config.gameWidth - width) return Direction.RIGHT
		if(y < 0) return Direction.UP
		if(y > Config.gameHeight - height) return Direction.DOWN
		
		//NOTE 后一个方法逻辑存在问题，导致坦克原地转圈，因为后面的x、y是处理后的局部变量
		val collision = checkCollision(block.x, block.y, block.width, block.height, x, y, width, height)
		//val collision = block.checkCollision(this)
		return if(collision) currentDirection else null
	}
	
	/**
	 * 通知碰撞
	 */
	fun notifyCollision(direction: Direction?, block: Blockable?)
}
